# -*- coding=utf-8
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import sys
import os
import logging

from django.http import HttpResponse
from django.conf import settings

secret_id = settings.TENCENTCLOUD_SECRET_ID  # 用户的 SecretId
secret_key = settings.TENCENTCLOUD_SECRET_KEY  # 用户的 SecretKey

def cos_file_list(region_position,Bucket,prefix):
    """
    获取cos桶中的文件列表
    :param region_position: 所属地区：ap-guangzhou
    :param Bucket: 桶名
    :param prefix: 文件夹
    :return: 文件列表
    """
    # 正常情况日志级别使用 INFO，需要定位时可以修改为 DEBUG，此时 SDK 会打印和服务端的通信信息
    logging.basicConfig(level=logging.INFO, stream=sys.stdout)

    # 1. 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在 CosConfig 中移除，请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成

    region = region_position  # 替换为用户的 region，已创建桶归属的region可以在控制台查看，https://console.cloud.tencent.com/cos5/bucket
    # COS 支持的所有 region 列表参见https://cloud.tencent.com/document/product/436/6224
    token = None  # 如果使用永久密钥不需要填入 token，如果使用临时密钥需要填入，临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048
    scheme = 'https'  # 指定使用 http/https 协议来访问 COS，默认为 https，可不填

    config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
    client = CosS3Client(config)

    marker = ""
    result_list = []
    while True:
        response = client.list_objects(
            Bucket=Bucket,
            Prefix=prefix,
            Marker=marker
        )
        result_list.append(response["Contents"])
        if response['IsTruncated'] == 'false':
            break
        marker = response['NextMarker']

    return result_list


def cos_file_add(region_position, Bucket, LocalFilePath, file_name):
    """
    上传文件到cos
    :param region_position: 所属地区：ap-guangzhou
    :param Bucket: 桶名
    :param LocalFilePath: 需要上传的文件路径
    :param file_name: 上传到cos后的文件命名
    :return:
    """
    # 正常情况日志级别使用 INFO，需要定位时可以修改为 DEBUG，此时 SDK 会打印和服务端的通信信息
    logging.basicConfig(level=logging.INFO, stream=sys.stdout)

    # 1. 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在 CosConfig 中移除，请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成
    region = region_position  # 替换为用户的 region
    token = None  # 如果使用永久密钥不需要填入 token，如果使用临时密钥需要填入
    scheme = 'https'  # 指定使用 http/https 协议来访问 COS，默认为 https，可不填

    config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
    client = CosS3Client(config)

    #### 高级上传接口（推荐）
    # 根据文件大小自动选择简单上传或分块上传，分块上传具备断点续传功能。
    response = client.upload_file(
        Bucket=Bucket,
        LocalFilePath=LocalFilePath,
        Key=file_name,
        PartSize=1,
        MAXThread=10,
        EnableMD5=False
    )
    print(response['ETag'])


